递归
function factorial(num){
if(num<=1){
return 1;
}else {
return num * arguments.callee(num-1);
}
}
console.log(factorial(4));
闭包
闭包是指有权访问另一个函数作用域中的变量的函数。
闭包与变量
作用域链的这种配置机制引出了一个值得注意的副作用,即闭包只能取得包含函数中任何变量的最后一个值。别忘了闭包所保存的是整个变量对象,而不是某个特殊的变量。
function createFunctions(){
var result = new Array();
for (var i=0; i<10; i++){
result[i] = function(){
return i;
}
}
return result;
}
我们可以通过创建另一个匿名函数强制让闭包的行为符合预期。
function createFunctions(){
var result = new Array();
for (var i=0; i<10; i++){
result[i] = function(num){
return function(){
return num;
};
}(i);
}
return result;
}
关于this对象
在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window。
var name = "The window";
var object = {
name: "My Object",
getNameFunc: function(){
return function(){
return this.name;
};
}
};
console.log(object.getNameFunc()()); // The window
不过,把外部作用域中的this对象保存在一个闭包能够访问到的变量里,就可以让闭包访问该对象了。
var name = "The window";
var object = {
name: "My Object",
getNameFunc: function(){
var that = this;
return function(){
return that.name;
};
}
};
console.log(object.getNameFunc()()); // My Object
模仿块级作用域
用块级作用域(通常称为私用作用域)的匿名函数的语法如下所示:
(function(){
})();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。